package StringUtils;

import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 * 文件分割
 * 
 * @author Wangpeihu
 * @team [Never give up]
 * @since JDK1.6(建议)
 * @date 2010-3-9
 */
public class SplitPic implements ActionListener {

	JFrame jf = new JFrame("FileSplit");
	private static JTextField jt1 = new JTextField(20);
	private static JTextField jt2 = new JTextField(20);
	/**
	 * 在java.awt包下面有一个FileDialog类， 此类显示一个对话框窗口，用户可以从中选择文件
	 * 由于它是一个对话框窗口，当我们调用它的show方法时，它会阻塞其他的程序窗口，直到用户选择了一个文件为止 这里的jf是调用此对话框的父类
	 */
	private FileDialog jm = new FileDialog(jf, "打开", FileDialog.LOAD);
	private static String dz;

	public void actionPerformed(ActionEvent e) {
		String comm = e.getActionCommand();
		if ("open".equals(comm)) {
			this.open();
			jt1.setText(dz);
		} else if ("split".equals(comm)) {
			try {
				this.split();
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		} else {
			try {
				this.sum();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

	/**
	 * 打开方法
	 */
	public void open() {
		jm.setMode(FileDialog.LOAD);
		jm.setLocation(500, 400);
		jm.setVisible(true);
		dz = jm.getDirectory() + jm.getFile();
	}

	/**
	 *
	 */
	public SplitPic() {
		jf.setLayout(new FlowLayout());
		JLabel jl1 = new JLabel("Address:");
		jf.add(jl1);
		jf.add(jt1);
		JLabel jl2 = new JLabel("size:");
		jf.add(jl2);
		JButton jb1 = new JButton("open");
		jb1.addActionListener(this);
		JButton jb2 = new JButton("split");
		jb2.addActionListener(this);
		JButton jb3 = new JButton("sum");
		jb3.addActionListener(this);
		jf.add(jt2);
		jf.add(jb1);
		jf.add(jb2);
		jf.add(jb3);
		jf.setLocation(400, 400);
		jf.pack();
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	/**
	 * 
	 * @合并方法
	 */
	public void sum() throws Exception {

		for (int j = 0;; j++) {
			FileInputStream fis = new FileInputStream(dz + j);
			File file = new File(dz + j); // 在java.io包中有一个File类，此类有个方法是leng(),用此方法可以得到该文件的实际字节数。
			for (int i = 0;; i++) {
				int s = Integer.parseInt(jt2.getText());
				byte[] b = new byte[s];
				FileOutputStream fos = new FileOutputStream(dz, true);
				int num = fis.read(b);
				if (num == -1)
					break;
				fos.write(b, 0, num);
				fos.close();
			}
			fis.close();
		}
	}

	/**
	 * @ 分割方法
	 */
	public void split() throws Exception {
		FileInputStream fis = new FileInputStream(dz);
		for (int i = 0;; i++) {
			int s = Integer.parseInt(jt2.getText());
			byte[] b = new byte[s]; // s代表每次读取的文件大小，单位字节
			FileOutputStream fos = new FileOutputStream(dz + i);
			int num = fis.read(b);
			if (num == -1)
				break;
			fos.write(b, 0, num);
			fos.close();
		}
		fis.close();
	}

	public static void main(String[] args) {
		new SplitPic();
	}

}
